# 导入相关的模块
from fastapi import FastAPI
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker, declarative_base

# 2.创建对象
app = FastAPI()  # 创建一个app应用对象
# 3.ORM映射的创建
DATABASE_URL = "sqlite:///./province.db"  # SQLite数据库连接地址
# 3.1 创建数据库连接对象
# create_engine("数据的连接地址", connect_args={配置参数})
engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})
# 3.2 创建一个会话对象
# sessionmaker(autocommit=提交, autoflush=刷新, bind=数据引擎)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# 3.3 创建一个数据库基类
Base = declarative_base()


# 4.创建数据库模型
class Province(Base):
    __tablename__ = "province"  # 表名
    id = Column(Integer, primary_key=True, index=True)  # id，类型integer，主键，索引
    provionce_name = Column(String(20), unique=True)  # 省份名称，类型string，长度为20字符，唯一
    provionce_code = Column(String(20), unique=True)  # 省份编码，类型string，长度为20字符


class city(Base):
    __tablename__ = "city"  # 表名
    id = Column(Integer, primary_key=True, index=True)  # id，类型integer，主键，索引
    city_name = Column(String(20), unique=True)  # 城市名称，类型string，长度为20字符，唯一
    city_code = Column(String(20), unique=True)  # 城市编码，类型string，长度为20字符


# 5.创建数据库表
Base.metadata.create_all(bind=engine)


# 6.编写路由函数
@app.get("/")
async def index():
    return {"message": "fastAPI ORM操作sqlite数据库11111"}


# 添加省份的数据路由函数
@app.post("/add_province")
async def add_province(province_name: str, province_code: str):
    db = SessionLocal()  # 创建一个会话对象
    # Province() 数据库模型类名称，province_name: 字段1, province_code: 字段1
    province = Province(provionce_name=province_name, provionce_code=province_code)  # 创建一个省份对象
    db.add(province)  # 添加1条数据
    db.commit()  # 提交数据
    db.close()  # 关闭会话
    return {"message": "添加成功"}


if __name__ == '__main__':
    import uvicorn

    # uvicorn.run(app, host="127.0.0.1", port=8000)
    uvicorn.run("sqliteData:app", host="127.0.0.1", port=8000, reload=True)
